home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / unixlib.lha / unix / src / timers.c < prev    next >
C/C++ Source or Header  |  1995-09-05  |  1KB  |  69 lines

  1. #include "amiga.h"
  2. #include "devices.h"
  3. #include "timers.h"
  4.  
  5. struct timeinfo *_alloc_timer(void)
  6. {
  7.     struct timeinfo *timer = AllocMem(sizeof(struct timeinfo), 0);
  8.  
  9.     if (!timer)
  10.     return 0;
  11.     timer->sent = FALSE;
  12.     timer->io = (struct timerequest *)
  13.     _device_open("timer.device", UNIT_VBLANK, 0L, 0L, 0, sizeof(struct timerequest));
  14.     if (!timer->io) {
  15.     FreeMem(timer, sizeof(struct timeinfo));
  16.     return 0;
  17.     }
  18.     return timer;
  19. }
  20.  
  21. void _free_timer(struct timeinfo *timer)
  22. {
  23.     if (timer) {
  24.     _timer_abort(timer);
  25.     _device_close(timer->io);
  26.     FreeMem(timer, sizeof(struct timeinfo));
  27.     }
  28. }
  29.  
  30. void _timer_abort(struct timeinfo *timer)
  31. {
  32.     if (timer->sent) {
  33.     AbortIO(timer->io);
  34.     WaitIO(timer->io);
  35.     /* Clear timer io signal */
  36.     /*SetSignal(0, timer_sig(timer)); */
  37.     timer->sent = FALSE;
  38.     }
  39. }
  40.  
  41. ULONG _timer_sig(struct timeinfo *timer)
  42. {
  43.     return 1UL << timer->io->tr_node.io_Message.mn_ReplyPort->mp_SigBit;
  44. }
  45.  
  46. void _timer_start(struct timeinfo *timer, int secs, int micros)
  47. /* _timer_start(timer, 0) stops a timer */
  48. {
  49.     _timer_abort(timer);
  50.     if (secs || micros) {
  51.     timer->io->tr_time.tv_secs = secs;
  52.     timer->io->tr_time.tv_micro = micros;
  53.     timer->io->tr_node.io_Command = TR_ADDREQUEST;
  54.     SendIO(timer->io);
  55.     timer->sent = TRUE;
  56.     }
  57. }
  58.  
  59. int _timer_expired(struct timeinfo *timer)
  60. /* A non-started timer is defined to not have expired */
  61. {
  62.     if (timer->sent && CheckIO(timer->io)) {
  63.     WaitIO(timer->io);
  64.     timer->sent = FALSE;
  65.     return TRUE;
  66.     }
  67.     return FALSE;
  68. }
  69.